import {reqOrderAddress,reqOrderInfo,reqBuyNowGoods,reqSubmitOrder,reqPrePayInfo} from '@/api/orderpay'
//引入时间处理函数
import {formatTime} from '@/utils/formatTime'
//表单数据验证函数
import Schema from 'async-validator'

const app = getApp()
Page({
  data: {
    buyName: '', // 订购人姓名
    buyPhone: '', // 订购人手机号
    deliveryDate: '选择送达日期', // 期望送达日期
    blessing: '', // 祝福语
    show: false, // 期望送达日期弹框
    minDate: new Date().getTime(),
    currentDate: new Date().getTime(),
    orderAddress:{},//订单地址
    orderInfo:{},//订单商品详情
    // totalPrice:0//总价
  },

  //提交订单，传递数据，验证表单内容
  async submitOrder(){
    const {buyName,buyPhone,orderInfo,deliveryDate,blessing,orderAddress} = this.data
    //组织接口参数
    const params = {
      buyName,
      buyPhone,
      cartList:orderInfo.cartVoList,
      deliveryDate,
      remarks:blessing,
      userAddressId:orderAddress.id
    }
    // console.log(params,'params');

    const res = await this.validateAddress(params)
    //验证通过
    if (!res.valid) return

    const recive = await reqSubmitOrder(params)
    console.log(recive,'recive');
    if (recive.code=== 200) {
      //当代码成功时，得到返回的订单号，挂载到全局使用
      this.orderNo = recive.data
      //调用预付订单函数
      // console.log(this.orderNo,'this.orderNo');
      this.advancePay()
    }
  },
  //微信预付订单函数
  async advancePay(){
    //调用接口
    // console.log(this.orderNo,'this.orderNo');
    const res = await reqPrePayInfo(this.orderNo)
    if (res.code === 200) {
       // 调用  wx.requestPayment 发起微信支付
       const payInfo = await wx.requestPayment(res.data)
       console.log(payInfo);
    }
  },

   //验证表单内容的函数
   validateAddress(params){
    //验证表单模块
    //引入正则表达式
    // 验证收货人，是否只包含大小写字母、数字和中文字符
    const nameRegExp = '^[a-zA-Z\\d\\u4e00-\\u9fa5]+$'

    // 验证手机号，是否符合中国大陆手机号码的格式
    const phoneReg = '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$'
    //创建规则
    const rules = {
      //姓名判断
      buyName:[
        // required 是否是必填项
        { required: true, message: '订购人姓名不能为空' },
        // 正则判断
        {pattern:nameRegExp,message:"订购人姓名不合法"}

      ],
      //电话判断
      buyPhone:[
        // required 是否是必填项
        { required: true, message: '订购人电话不能为空' },
        // 正则判断
        {pattern:phoneReg,message:"订购人电话号码不合法"}
      ],
      //日期判断
      deliveryDate:[
        { required: true, message: '日期不能为空' }
      ]

    }
    //创建实例等待传入验证规则
    const validator = new Schema(rules)

    return new Promise((resolve,reject)=>{
      validator.validate(params,(errors,fields)=>{
        //fields代表有哪些参数不合法
        // console.log(fields,'fields');
        if (errors) {
          //验证错误时，调用弹框，提示错误信息
          wx.toast({title:errors[0].message})
          // console.log(errors,'errors');
          resolve({valid:false})
        }else {
          //验证成功，传出true
          resolve({valid:true})
        }
      })
    })
  },

  //获取订单页面详情数据
  async getOrderInfo(){
    //如果是从商品页面直接购买进入,就调用立即购买的api
    console.log(this.data.goodsId,this.data.blessing);
    const goodsId = this.data.goodsId
    const blessing = this.data.blessing
    const {data:orderInfo} =this.data.goodsId?await reqBuyNowGoods({goodsId,blessing}) : await reqOrderInfo()
    console.log(orderInfo);
    //商品列表
    const orderGoods = orderInfo.cartVoList.find(item=>item.blessing!=='')
  
    this.setData({
      orderInfo:orderInfo,
      blessing:!orderGoods?'':orderGoods.blessing
    })
  },

  //获取默认收货地址
  async getAddress(){
    //如果有全局地址就用全局地址
    if (app.globalData.address.id) {
      this.setData({
        orderAddress:app.globalData.address
      })
      return
    }
    //如果没有全局地址，就获取
      const res = await reqOrderAddress()
      console.log('没有地址');
      this.setData({
        orderAddress:res.data
      })
    
    
  },

  // 选择期望送达日期
  onShowDateTimerPopUp() {
    this.setData({
      show:true
    })
  },

  // 期望送达日期确定按钮
  onConfirmTimerPicker(event) {
    console.log(event);
    const timer = event.detail //时间戳
    const resData = formatTime(new Date(timer))
    
    this.setData({
      show: false,
      deliveryDate:resData
    })
  },

  // 期望送达日期取消按钮 以及 关闭弹框时触发
  onCancelTimePicker() {
    this.setData({
      show: false,
      minDate: new Date().getTime(),
      currentDate: new Date().getTime()
    })
  },

  // 跳转到收货地址
  toAddress() {
    wx.navigateTo({
      url: '/modules/settingModule/pages/address/list/index?flag=1'
    })
  },

    onLoad(options){
      this.setData({
        ...options
      })
    },
  onShow(){
    //页面展示时获取收货地址
    this.getAddress()
    //获取详情地址
    this.getOrderInfo()
    // console.log(new Date().getTime());
  }
})
